﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Linq;
using System.Collections;
using netDxf.Entities;
using System.Reflection.Emit;
using System.Windows.Forms;


namespace ShowDXF
{
    public class DrawDXF
    {
        public Graphics g;  //创建画布
        public float MoveLength_X;   //定义dxf图形在X轴方向移动到原点的距离
        public float MoveLength_Y;   //定义dxf图形在Y轴方向移动到原点的距离
        public float ZoomFactor;     //DXF图形缩放因子
        public float MoveCenterX;    //因平移图形后，使得图形的左下角和窗体的左下角在同一点上，但图形按比例缩放后，图形不在窗体X轴的中心，故设置此变量，用于计算图形距离窗体X轴方向上中心的距离
        public float MoveCenterY;    //因平移图形后，使得图形的左下角和窗体的左下角在同一点上，但图形按比例缩放后，图形不在窗体Y轴的中心，故设置此变量，用于计算图形距离窗体Y轴方向上中心的距离

        public void SetPicture(PictureBox Picture)
        {
            g = Picture.CreateGraphics();  //创建画布
            g.TranslateTransform(0, Picture.Height); //移动原点
            g.ScaleTransform(1f, -1f);//缩小或放大当前坐标系
        }


        public void Draw(PictureBox Picture, string DxfPath)
        {
            SetPicture(Picture);//创建并设置画布

            //调用各类中的方法，获取dxf数据元
            LoadPath loadPath = new LoadPath();//实例化类 
            loadPath.LoadDxfDoc(DxfPath);//调用类中的方法，加载文件,获取DxfDoc文件流

            LoadLine loadLine = new LoadLine();//实例化类 
            loadLine.GetLine();//调用类中的方法，加载文件中的直线

            MoveZero moveZero = new MoveZero();//实例化类
            moveZero.GetExPoint();//获取dxf文件中所有坐标的最大值、最小值
            MoveLength_X = moveZero.MoveLength_X; //dxf图形在X轴方向移动到原点的距离
            MoveLength_Y = moveZero.MoveLength_Y; //dxf图形在Y轴方向移动到原点的距离

            ZoomDXF zoomDXF = new ZoomDXF();
            zoomDXF.Zoom(Picture);//调用类中的方法 ，获取dxf图形的缩放系数
            ZoomFactor = zoomDXF.ZoomFactor;    //DXF图形缩放因子
            MoveCenterX = zoomDXF.MoveCenterX;  // Dxf图形X轴移动到窗体中心的距离
            MoveCenterY = zoomDXF.MoveCenterY;  // Dxf图形X轴移动到窗体中心的距离

            //在Picture窗体中绘出直线
            // 在画板上画直线,起始坐标为(X1, Y1),终点坐标为(X2, Y2)
            // ZoomFactor为适合在当前Form上显示的缩放系数
            // MoveZeroX, MoveZeroY为把dxf图形移动到原点(0,0)
            // MoveCenterX为缩放后的dxf图形，距离窗体X轴方向上中心的距离
            // MoveCenterY为缩放后的dxf图形，距离窗体Y轴方向上中心的距离

            for (int i = 0; i < loadLine.Line_count; i = i + 1)
            {
                Pen MyPen = new Pen(Color.FromArgb(loadLine.LineColorR[i], loadLine.LineColorG[i], loadLine.LineColorB[i]), 0);  //定义画笔的颜色和宽度
                g.DrawLine(MyPen, (loadLine.LinePointStartX[i] + MoveLength_X) * ZoomFactor + MoveCenterX, (loadLine.LinePointStartY[i] + MoveLength_Y) * ZoomFactor + MoveCenterY, (loadLine.LinePointEndX[i] + MoveLength_X) * ZoomFactor + MoveCenterX, (loadLine.LinePointEndY[i] + MoveLength_Y) * ZoomFactor + MoveCenterY);
            }

            Font font = new Font("华为宋体", 10);
            PointF point = new PointF((-71 + MoveLength_X) * ZoomFactor + MoveCenterX, (2633 + MoveLength_Y) * ZoomFactor + MoveCenterY);

            g.DrawString("我是Kimisme", font, Brushes.LightGray, point);



            // MessageBox.Show(MoveZero.MoveZeroLength_X.ToString());
        }
    }

}
